/* 
抽象类
  不能创建实例对象, 只有实现类才能创建实例
  可以包含未实现的抽象方法
*/
(() => {
  abstract class Animal {

    abstract cry ()

    run () {
      console.log('run()')
    }
  }


  class Dog extends Animal {
    cry () {
      console.log(' Dog cry()')
    }
  }

  const dog = new Dog()
  dog.cry()
  dog.run()

  /* 
  实现类: 所有方法都实现方法
  抽象类: 方法可以是实现方法和抽象方法
  接口: 所有方法都是抽象方法
  */

})()